{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from transformer import Encoding, Decoding\n",
    "from tensorflow.keras import layers, optimizers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据模拟(一维数据)\n",
    "\n",
    "x = np.arange(0, 1000, 0.5)\n",
    "y = np.cos(x) + np.sin(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据预处理\n",
    "\n",
    "class create_data(object):\n",
    "    def __init__(self, data, split_percentage, input_length, output_length):\n",
    "        \"\"\"\n",
    "        :params data: 传入一维数据\n",
    "        :params split_percentage: 数据集切割百分比\n",
    "        :params input_length: 传入编码层的长度\n",
    "        :params output_length: 传入解码层的长度(强制教学所需长度、预测长度)\n",
    "        \"\"\"\n",
    "        train = data[:int(split_percentage*len(data))]\n",
    "        test = data[int(split_percentage*len(data)):]\n",
    "        self.xtrain ,self.ytrain, self.train_label = self.structurize(train, input_length, output_length)\n",
    "        self.xtest ,self.ytest, self.test_label = self.structurize(test, input_length, output_length)\n",
    "\n",
    "    \n",
    "    def structurize(self, data, input_length, output_length):\n",
    "        \"\"\" \n",
    "        :params data: 传入数组\n",
    "        :params input_length: 传入编码层的长度\n",
    "        :params output_length: 传入解码层的长度(强制教学所需长度、预测长度)\n",
    "        :return: 返回两个二维数组\n",
    "        \"\"\"\n",
    "        x = []\n",
    "        y = []\n",
    "        label = []\n",
    "        for i in range(len(data)-input_length-output_length):\n",
    "            x.append(list(data[i:i+input_length]))\n",
    "            y.append(list(data[i+input_length-1: i+input_length+output_length-1]))\n",
    "            label.append(list(data[i+input_length: i+input_length+output_length]))\n",
    "        \n",
    "        x = np.array(x)\n",
    "        x = np.reshape(x, (-1, input_length, 1))\n",
    "        y = np.array(y)\n",
    "        y = np.reshape(y, (-1, output_length, 1))\n",
    "        label = np.array(label)\n",
    "        label = np.reshape(label, (-1, output_length, 1))\n",
    "        return x, y, label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = create_data(y, 0.8, 200, 10)\n",
    "xtrain, ytrain, train_label = data.xtrain, data.ytrain, data.train_label\n",
    "xtest, ytest, test_label = data.xtest, data.ytest, data.test_label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 实例化模型\n",
    "\n",
    "encoding = Encoding(units=64, heads=1, length=200)\n",
    "decoding = Decoding(units=64, heads=1, length=10)\n",
    "linear = layers.Dense(1)\n",
    "\n",
    "# 初始化优化器\n",
    "optimizer = optimizers.Adam(1e-3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_loss=2.6714315  test_loss=0.79101795\n",
      "train_loss=0.79331064  test_loss=0.99856305\n",
      "train_loss=1.0019611  test_loss=0.8770739\n",
      "train_loss=0.88006026  test_loss=0.49147126\n",
      "train_loss=0.49366835  test_loss=0.28438103\n",
      "train_loss=0.28548172  test_loss=0.28959343\n",
      "train_loss=0.2896373  test_loss=0.31237012\n",
      "train_loss=0.3117403  test_loss=0.26136684\n",
      "train_loss=0.26047343  test_loss=0.19314356\n",
      "train_loss=0.19228885  test_loss=0.17483851\n",
      "train_loss=0.17427532  test_loss=0.19951287\n",
      "train_loss=0.19928078  test_loss=0.21273232\n",
      "train_loss=0.21271373  test_loss=0.1847822\n",
      "train_loss=0.18464148  test_loss=0.13443862\n",
      "train_loss=0.13398914  test_loss=0.09982518\n",
      "train_loss=0.09891496  test_loss=0.09869645\n",
      "train_loss=0.0975148  test_loss=0.11541613\n",
      "train_loss=0.11420763  test_loss=0.12141839\n",
      "train_loss=0.12034356  test_loss=0.10469362\n",
      "train_loss=0.10377271  test_loss=0.076441966\n",
      "train_loss=0.07573275  test_loss=0.05633611\n",
      "train_loss=0.055744838  test_loss=0.054123405\n",
      "train_loss=0.053630434  test_loss=0.06340502\n",
      "train_loss=0.0630139  test_loss=0.07004554\n",
      "train_loss=0.0696653  test_loss=0.06548496\n",
      "train_loss=0.06510217  test_loss=0.053096186\n",
      "train_loss=0.052670583  test_loss=0.04221716\n",
      "train_loss=0.041741688  test_loss=0.039342754\n",
      "train_loss=0.038821403  test_loss=0.04268818\n",
      "train_loss=0.042155184  test_loss=0.04533086\n",
      "train_loss=0.04484608  test_loss=0.042449236\n",
      "train_loss=0.042052947  test_loss=0.03523313\n",
      "train_loss=0.034970507  test_loss=0.02872392\n",
      "train_loss=0.028617676  test_loss=0.02651847\n",
      "train_loss=0.026569864  test_loss=0.027883045\n",
      "train_loss=0.02804513  test_loss=0.029164596\n",
      "train_loss=0.02937773  test_loss=0.027807381\n",
      "train_loss=0.028001066  test_loss=0.024398254\n",
      "train_loss=0.024520952  test_loss=0.021398773\n",
      "train_loss=0.021437382  test_loss=0.020370035\n",
      "train_loss=0.020339118  test_loss=0.020612305\n",
      "train_loss=0.020529935  test_loss=0.020340709\n",
      "train_loss=0.020220464  test_loss=0.018706603\n",
      "train_loss=0.018586677  test_loss=0.016582808\n",
      "train_loss=0.016475648  test_loss=0.015316255\n",
      "train_loss=0.015208131  test_loss=0.015090537\n",
      "train_loss=0.015014269  test_loss=0.014941573\n",
      "train_loss=0.014889619  test_loss=0.013975284\n",
      "train_loss=0.01394458  test_loss=0.012394172\n",
      "train_loss=0.012378637  test_loss=0.011195074\n",
      "train_loss=0.01118071  test_loss=0.01092299\n",
      "train_loss=0.010900868  test_loss=0.011093439\n",
      "train_loss=0.011058487  test_loss=0.010810596\n",
      "train_loss=0.010751342  test_loss=0.00976419\n",
      "train_loss=0.009689355  test_loss=0.008493829\n",
      "train_loss=0.008429138  test_loss=0.0077677155\n",
      "train_loss=0.00769937  test_loss=0.0076743136\n",
      "train_loss=0.0076063196  test_loss=0.007678915\n",
      "train_loss=0.007616649  test_loss=0.0072987676\n",
      "train_loss=0.007237985  test_loss=0.006587935\n",
      "train_loss=0.0065253093  test_loss=0.0059774257\n",
      "train_loss=0.0059120837  test_loss=0.00569513\n",
      "train_loss=0.005629579  test_loss=0.0055598286\n",
      "train_loss=0.005496488  test_loss=0.005286884\n",
      "train_loss=0.0052285865  test_loss=0.0048449966\n",
      "train_loss=0.0047970493  test_loss=0.004435533\n",
      "train_loss=0.0044035763  test_loss=0.004182943\n",
      "train_loss=0.0041638208  test_loss=0.004001043\n",
      "train_loss=0.0039873146  test_loss=0.0037567392\n",
      "train_loss=0.0037427067  test_loss=0.0034696585\n",
      "train_loss=0.003450824  test_loss=0.0032635576\n",
      "train_loss=0.0032379234  test_loss=0.003159629\n",
      "train_loss=0.0031270892  test_loss=0.0030445757\n",
      "train_loss=0.0030073624  test_loss=0.0028397138\n",
      "train_loss=0.002800355  test_loss=0.002612011\n",
      "train_loss=0.0025727337  test_loss=0.0024685133\n",
      "train_loss=0.0024311456  test_loss=0.0024010679\n",
      "train_loss=0.0023661999  test_loss=0.0023059677\n",
      "train_loss=0.002273064  test_loss=0.0021403057\n",
      "train_loss=0.0021078596  test_loss=0.0019771194\n",
      "train_loss=0.0019436326  test_loss=0.001890642\n",
      "train_loss=0.0018555636  test_loss=0.0018529254\n",
      "train_loss=0.0018172454  test_loss=0.0017863903\n",
      "train_loss=0.0017517653  test_loss=0.0016777139\n",
      "train_loss=0.0016455934  test_loss=0.0015824714\n",
      "train_loss=0.0015533252  test_loss=0.001533451\n",
      "train_loss=0.0015068339  test_loss=0.0015000117\n",
      "train_loss=0.0014752771  test_loss=0.0014453348\n",
      "train_loss=0.0014217225  test_loss=0.0013760915\n",
      "train_loss=0.0013534409  test_loss=0.0013180461\n",
      "train_loss=0.0012967907  test_loss=0.0012739234\n",
      "train_loss=0.0012547311  test_loss=0.0012278705\n",
      "train_loss=0.0012116561  test_loss=0.0011761525\n",
      "train_loss=0.0011636664  test_loss=0.0011287312\n",
      "train_loss=0.00112003  test_loss=0.0010888806\n",
      "train_loss=0.0010834421  test_loss=0.0010500264\n",
      "train_loss=0.0010468723  test_loss=0.0010108451\n",
      "train_loss=0.0010091449  test_loss=0.000977066\n",
      "train_loss=0.00097642804  test_loss=0.00094894366\n",
      "train_loss=0.00094933994  test_loss=0.00091884914\n"
     ]
    }
   ],
   "source": [
    "for _ in range(100):\n",
    "    with tf.GradientTape() as tape:\n",
    "        ec = encoding(xtrain)\n",
    "        out = decoding(ec, ytrain)\n",
    "        out = linear(out)\n",
    "        loss = tf.reduce_mean((train_label-out)**2)\n",
    "    grads = tape.gradient(loss, [*encoding.trainable_variables, *decoding.trainable_variables, *linear.trainable_variables])\n",
    "    optimizer.apply_gradients(zip(grads, [*encoding.trainable_variables, *decoding.trainable_variables, *linear.trainable_variables]))\n",
    "    ec_ = encoding(xtest)\n",
    "    out_ = decoding(ec_, ytest)\n",
    "    out_ = linear(out_)\n",
    "    loss_ = tf.reduce_mean((test_label-out_)**2)\n",
    "    print('train_loss='+str(loss.numpy())+ '  '+'test_loss='+str(loss_.numpy()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 测试集绘图\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "encod = encoding(xtest)\n",
    "out = decoding(encod, ytest)\n",
    "out = linear(out)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(15, 8))\n",
    "pre = np.reshape(out[-2].numpy(), (1, -1))[0]\n",
    "true = np.reshape(test_label[-2], (1, -1))[0]\n",
    "plt.plot(pre, color='red', linestyle='--', label='predict')\n",
    "plt.plot(true, color='blue', linestyle='--', label='True')\n",
    "plt.legend(loc='best')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 预测\n",
    "### $输入(编码数据:A_1, A_2, A_3, A_4,..,A_n)$ + $(标签数据: A_n, B_1, B_2,...,B_m)$ -> (预测数据: $\\hat{A}_{n+1},...,B$) 其中B所有标签为任意一个实数， 使用改框架时必须要用任意实数去填满后面的标签数据, 所以在预测的时候只需取第一个预测数据即可, 在将预测数据塞入输出端:\n",
    "### $$输入(A_2, A_3, A_4,..,A_n, \\hat{A}_{n+1}) + (标签: \\hat{A}_{n+1}, B_1....B_m) -> (预测: \\hat{A}_{n+2},...,B)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict(data):\n",
    "    \"\"\"\n",
    "    :params data: 传入三维数据\n",
    "    \"\"\"\n",
    "    A = np.reshape(data, (1, -1))[0][-1]\n",
    "    s = np.random.randn(9)\n",
    "    A = np.array([A])\n",
    "    label = np.concatenate([A, s])\n",
    "    label = np.reshape(label, (1, -1, 1))\n",
    "    out = encoding(data)\n",
    "    out = decoding(out, label)\n",
    "    out = linear(out)\n",
    "    pre = tf.reshape(out, (1, -1))[0].numpy()[0]\n",
    "    return pre"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.77812105"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = np.reshape(xtest[-1], (1, -1, 1))\n",
    "predict(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "class prediction(object):\n",
    "    def __init__(self, data):\n",
    "        self.data = data\n",
    "        self.encoding = encoding\n",
    "        self.decoding = decoding\n",
    "        self.linear = linear\n",
    "    \n",
    "    def predict(self, data):\n",
    "        \"\"\"\n",
    "        :params data: 传入三维数据\n",
    "        \"\"\"\n",
    "        A = np.reshape(data, (1, -1))[0][-1]\n",
    "        s = np.random.randn(9)\n",
    "        A = np.array([A])\n",
    "        label = np.concatenate([A, s])\n",
    "        label = np.reshape(label, (1, -1, 1))\n",
    "        out = encoding(data)\n",
    "        out = decoding(out, label)\n",
    "        out = linear(out)\n",
    "        pre = tf.reshape(out, (1, -1))[0].numpy()[0]\n",
    "        return pre\n",
    "    \n",
    "    def call(self, num):\n",
    "        \"\"\"\n",
    "        :params num: 预测次数(最多十次)\n",
    "        \"\"\"\n",
    "        result = []\n",
    "        data = self.data\n",
    "        for _ in range(num):\n",
    "            out = self.predict(data)\n",
    "            result.append(out)\n",
    "            data = data[:, 1:, :]\n",
    "            out = np.array([[[out]]])\n",
    "            data = np.concatenate([data, out], axis=1)\n",
    "        return result\n",
    "            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "k = prediction(df)\n",
    "p = k.call(10)\n",
    "fig = plt.figure(figsize=(15, 8))\n",
    "plt.plot(p, linestyle='--')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "f23faf4bfe871c203c8bec80520af5927fc7cb1ae3bd834ddf554ee587ad1c05"
  },
  "kernelspec": {
   "display_name": "Python 3.8.5 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
